# -*- coding: utf-8 -*-
# author: sixmillions
# date: 2022/3/16

# Number类型
# 整型
print(6)
print(-6)
# 浮点类型，python中没有单双精度，只有float表示小数
print(6.6)

# 类型
print(type(6))  # <class 'int'>
print(type(6.6))  # <class 'float'>

# 运算
print(type(1 + 1))  # <class 'int'>
print(type(1 + 1.0))  # <class 'float'>
a = 6 * 6
print(a, type(a))  # 36 <class 'int'>
b = 6 * 6.0
print(b, type(b))  # 36.0 <class 'float'>

# 注意
# 整数除以整数，就算除尽了得到也是浮点类型
c = 2 / 2
print(c, type(c))  # 1.0 <class 'float'>
# 想得到整数用地板除
d = 2 // 2
print(d, type(d))  # 1 <class 'int'>
print(1 // 2, type(1 // 2))  # 0 <class 'int'>
# 地板除 除不尽向下取
e = 3 // 2
print(e, type(e))  # 1 <class 'int'>
# 如果有浮点数参与运算(混合运算)，Python会把整型转换成为浮点数
f = 3 // 2.0
print(f, type(f))  # 1.0 <class 'float'>

# 10进制，正常写
print(10)  # 10

# 2进制，前面加上0b或者0B
g = 0b110  # 二进制
print(g)  # 6 (自动输出10进制）
print(0B111)  # 7

# 8进制，前面加上0o或者0O
h = 0o777
print(h)  # 代表十进制的511
print(0O567)  # 375

# 16进制，前面加上0x或者0X，9之后的用A B C D E F 或者 a b c d e f
i = 0x1F
print(i)  # 代表十进制的31
print(0XAeF)  # 2799

# 转化到二进制用bin()方法
print("十进制到二进制：", bin(6))  # 十进制到二进制： 0b110
print("八进制到二进制：", bin(0o666))  # 八进制到二进制： 0b110110110
print("十六进制到二进制：", bin(0x3ef))  # 十六进制到二进制： 0b1111101111

# 转化到八进制，用方法 oct()
print("二进制转八进制：", oct(0b1111))  # 二进制转八进制： 0o17
print("十进制转八进制：", oct(30))  # 十进制转八进制： 0o36
print("十六进制转八进制：", oct(0x4ab))  # 十六进制转八进制： 0o2253

# 转化到十进制，用方法 int()
print("二进制转十进制：", int(0b1111))  # 二进制转十进制： 15
print("八进制转十进制：", int(0o567))  # 八进制转十进制： 375
print("十六进制转十进制：", int(0x4ab))  # 十六进制转十进制： 1195

# 转化到十六进制，用方法 hex()
print("二进制转十六进制：", hex(0b1111))  # 二进制转十六进制： 0xf
print("八进制转十六进制：", hex(0o456))  # 八进制转十六进制： 0x12e
print("十进制转十六进制：", hex(555))  # 十进制转十六进制： 0x22b

# bool类型
print(type(False), type(True))  # <class 'bool'> <class 'bool'>
# bool类型，可以看成是数字类型
print(isinstance(True, int))  # True
print(int(False), int(True))  # 可以转化成数值类型
print(bool(0), bool(1))  # False True
# 其他转化为bool类型 （0，空值，空列表，空元组，空字典，空字符串，空集合会被认为false，其他是true）
print(bool(-1), bool(3.2), bool(2), bool('xxx'), bool([1, 2]))  # True True True True True
# 0，空值，空列表，空元组，空字典，空字符串，空集合会被认为false
print(bool(0.0), bool(None), bool([]), bool(()), bool({}), bool(''), bool(set()))  # 全是False
# bool类型既然是数字类型，那么也可以运算
print(False + 1, True + 1)  # 1 2

# 复数
print(36j)  # 36j
print(2j * 3j)  # (-6+0j)
print(2j * -3j)  # (6-0j)
print(1j * 1j)  # (-1+0j)
